import time
import hmac
import hashlib
import base64
import urllib.parse

import requests


def generate_sign():
    """
    生成 时间戳 和  验证码
    :return:
    """
    # 生成一个13位的时间戳, 单位为毫秒
    timestamp = str(round(time.time() * 1000))
    secret = 'SECfc6f79142065e24d4c78592b9940cddae5d041218133f1cedafb2895e17f459f'
    secret_enc = secret.encode('utf-8')
    string_to_sign = '{}\n{}'.format(timestamp, secret)
    string_to_sign_enc = string_to_sign.encode('utf-8')
    # secret_enc 代码 密钥   ， string_to_sign_enc 代表消息   hashlib.sha256 代表所选的hash算法   digest 生成验证码
    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
    # 需要及那个验证码再进行base64编码 和 相应替换
    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
    return timestamp, sign


def send_msg(content, at_all=True):
    """
    向钉钉发送消息
    :param content: 消息内容
    :param at_all:True 表示发送并@全体人员 , False表示发送不@所有人
    :return:
    """
    timestamp, sign = generate_sign()
    url = (f'https://oapi.dingtalk.com/robot/send?access_token=15aac95f1ef97483c53feaba300feb5c96ee4da4c16aedab93cdddd600a75768&sign={sign}&timestamp={timestamp}')
    headers = {'Content-Type': 'application/json;charset=UTF-8'}
    data = {
        'msgtype': 'text',
        'text': {
            'content': content
        },
        'at': {
            'isAtAll': at_all
        }
    }
    response = requests.post(url=url, json=data, headers=headers)
    return response.text